import { defineComponent } from 'vue'
import type { NavigationGuard, RouteMeta } from 'vue-router'

/**
 * @description: 定义组件
 * @param {string} path 路径
 * @param {string} name 名称
 * @param {string} meta 元数据
 * @param {string} redirect 重定向
 * @param {string} component 组件
 * @param {string} children 子路由
 * @param {string} alias 别名
 * @param {string} props 路由参数
 * @param {string} beforeEnter 路由守卫
 * @param {string} fullPath 完整路径
 * @return {*}
 */
export type Component<T = any> = ReturnType<typeof defineComponent> | (() => Promise<typeof import('*.vue')>) | (() => Promise<T>)

export interface AppRouteRecordRaw {
  path: string // 路径
  name?: string | symbol // 名称
  meta?: RouteMeta // 元数据
  redirect?: string // 重定向
  component?: Component | string // 组件
  children?: AppRouteRecordRaw[] // 子路由
  alias?: string | string[] // 别名
  props?: Record<string, any> // 路由参数
  beforeEnter?: NavigationGuard | NavigationGuard[] // 路由守卫
  fullPath?: string // 完整路径
}
